/* 
* Copyright (C) 2015,中油瑞飞, 
* All Rights Reserved 
* Description: TODO What the class does.   
* 
* @project 瑞信
* @author  Administrator
* @date    2016年9月16日-下午12:58:09
*
* Modification History: 
**********************************************************
* Date		  Author		    Comments
* 2016年9月16日	  Administrator			Create
**********************************************************
*/
package com.liuhaozzu.hibernate.test;

import java.sql.Blob;
import java.sql.Clob;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.sql.rowset.serial.SerialBlob;
import javax.sql.rowset.serial.SerialClob;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.liuhaozzu.hibernate.demo.po.Score;
import com.liuhaozzu.hibernate.demo.po.ScoreId;
import com.liuhaozzu.hibernate.demo.po.StudentSingle;
import com.liuhaozzu.hibernate.demo.po.User;
import com.liuhaozzu.hibernate.demo.po.component.Address;
import com.liuhaozzu.hibernate.demo.po.component.Teacher;
import com.liuhaozzu.hibernate.demo.po.many2one.Grade;
import com.liuhaozzu.hibernate.demo.po.many2one.Student;
import com.liuhaozzu.hibernate.demo.po.one2many.Grade2;
import com.liuhaozzu.hibernate.demo.po.one2many.Student2;
import com.liuhaozzu.hibernate.demo.po.one2manybylist.Grade5;
import com.liuhaozzu.hibernate.demo.po.one2manybylist.Student5;
import com.liuhaozzu.hibernate.demo.utils.HibernateUtils;

/**
 * TODO What the class does
 * <p>Title:com.liuhaozzu.hibernate.test.CompositeIdTest.java</p>
 * <p>Description: </p>
 * <p>Company:www.richfit.com</p>
 * @author liuhaozzu
 * @date   2016年9月16日-下午12:58:09
 *
 */
public class One2ManyByList {
	@Test
	public void testSave(){
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();
			tx=session.beginTransaction();
			
			//关联表的保存顺序是根据外键的配置来决定的
			//如果外键不能为null，那么先保存 一 端；
			//如果外键可以为null，则可以随意保存。
			
			Student5 s2=new Student5();
			s2.setName("渊");
			
			Student5 s22=new Student5();
			s22.setName("子路");
			
			
			Grade5 grade2=new Grade5();
			grade2.setName("论语");
			List<Student5> set=new ArrayList<>();
			set.add(s2);
			set.add(s22);
			//设置关联关系
			grade2.setStudent5s(set);
			//只在内存中更新
			//在保存以后再修改对象，将会产生多条sql语句，效率较低，建议在save前将数据稳定。
			session.save(grade2);
			session.save(s2);
			session.save(s22);
			tx.commit();
			
			HibernateUtils.closeSession();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			tx.rollback();
			
		} finally {
			HibernateUtils.closeSession();
		}
	}
	@Test
	public void getTest(){
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();
			tx=session.beginTransaction();
			
			//关联表的保存顺序是根据外键的配置来决定的
			//如果外键不能为null，那么先保存 一 端；
			//如果外键可以为null，则可以随意保存。
			
			
			Grade2 grade2 = (Grade2) session.load(Grade2.class, 1);
			System.out.println(grade2.getName());
			System.out.println(grade2.getStudent2s());
			tx.commit();
			
			HibernateUtils.closeSession();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			tx.rollback();
			
		} finally {
			HibernateUtils.closeSession();
		}
	}
	@Test
	public void getListTest(){
		Session session=null;
		Transaction tx=null;
		try {
			session=HibernateUtils.getSession();
			tx=session.beginTransaction();
			
			//关联表的保存顺序是根据外键的配置来决定的
			//如果外键不能为null，那么先保存 一 端；
			//如果外键可以为null，则可以随意保存。
			
			/*List<Grade2> list= session.createQuery("from Grade2").list();
			for(Grade2 grade2:list){
				System.out.println("年级名："+grade2.getName());
			}*/
			
			Iterator<Grade2> iter =session.createQuery("from Grade2").iterate();
			Grade2 grade2;
			for(;iter.hasNext();){
				grade2=iter.next();
				System.err.println("年级名:"+grade2.getName());
			}
			
			tx.commit();
			
			HibernateUtils.closeSession();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			tx.rollback();
			
		} finally {
			HibernateUtils.closeSession();
		}
	}
}
